]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
background: use of CHANGES_DONE_HINT events to avoid reloads
authorCosimo Cecchi <cosimoc@gnome.org>
Mon, 31 Jul 2017 15:17:35 +0000 (16:17 +0100)
committerCosimo Cecchi <cosimoc@gnome.org>
Mon, 31 Jul 2017 15:17:35 +0000 (16:17 +0100)
Instead of potentially loading a background mid-way when it changes, and
loading it again for every file monitor event, leverage
CHANGES_DONE_HINT events, which allow us to ignore CREATED and CHANGED
signals from the file monitor.

https://bugzilla.gnome.org/show_bug.cgi?id=747794

js/ui/background.js

index 681a5feaab02fcbf4321b20caebf696f4037b993..1c2b83baec2c9ac09d6f4ab44f79b8f79254f9aa 100644 (file)
@@ -154,8 +154,12 @@ var BackgroundCache = new Lang.Class({
 
         let monitor = file.monitor(Gio.FileMonitorFlags.NONE, null);
         monitor.connect('changed',
-                        Lang.bind(this, function() {
-                            this.emit('file-changed', file);
+                        Lang.bind(this, function(obj, file, otherFile, eventType) {
+                            // Ignore CHANGED and CREATED events, since in both cases
+                            // we'll get a CHANGES_DONE_HINT event when done.
+                            if (eventType != Gio.FileMonitorEvent.CHANGED &&
+                                eventType != Gio.FileMonitorEvent.CREATED)
+                                this.emit('file-changed', file);
                         }));
 
         this._fileMonitors[key] = monitor;